package com.bbva.gptf.back.dominio;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.springframework.roo.addon.dbre.RooDbManaged;
import org.springframework.roo.addon.entity.RooEntity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;

import com.bbva.gptf.dto.bean.Contrato;
import com.bbva.gptf.dto.bean.EnumTipoMercado;
import com.bbva.gptf.dto.bean.Gestor;

@RooJavaBean
@RooToString
@RooDbManaged(automaticallyDelete = true)
@RooEntity(versionField = "", table = "VGPT002_SIMULACION", schema = "DBSGPT")
public class Vgpt002Simulacion {

	public static List<Vgpt002Simulacion> findByContrato(final List<BigDecimal> contratos) {
		return entityManager()
				.createQuery(
						"SELECT o FROM Vgpt002Simulacion o WHERE o.contrato in (:contratos)",
						Vgpt002Simulacion.class).setParameter("contratos", contratos)
				.getResultList();
	}

	/**
	 * @param listaContrato
	 * @return
	 */
	public static List<Vgpt002Simulacion> obtenerDatosSimulacion(
			final List<BigDecimal> listaContrato, final Gestor gestor) {
		StringBuffer qlString = new StringBuffer();
		qlString.append("Select sim ");
		qlString.append("FROM Vgpt002Simulacion sim ");
		qlString.append("WHERE sim.cdContrato IN (:contratos) and (tpMercado = :tpMercado OR tpMercado is null) ");
		qlString.append("Order by sim.cdClasifDelta, sim.tpValor, sim.cdEmisora, sim.cdSerie, sim.cdContrato ");		
		try {
			String mercado = EnumTipoMercado.getEnumTipoMercadoValor(new Integer(gestor
					.getUsuario().getPerfil().getMercado().getCdMercado().toString()));

			return entityManager().createQuery(qlString.toString(), Vgpt002Simulacion.class)
					.setParameter("contratos", listaContrato).setParameter("tpMercado", mercado)
					.getResultList();
		}
		catch (Exception e) {

			return new ArrayList<Vgpt002Simulacion>();
		}
	}

	@SuppressWarnings("unchecked")
	public static List<Contrato> obtieneContratosPosicion(final List<BigDecimal> listaContrato,
			final Gestor gestor) {
		// TODO Auto-generated method stub
		final StringBuffer qlString = new StringBuffer();
		qlString.append("SELECT new com.bbva.gptf.dto.bean.Contrato(");
		qlString.append("sim.cdContrato");
		qlString.append(",MAX(sim.cdClasifDelta)");
		qlString.append(",MAX(sim.imValuaCartera)");
		qlString.append(",MAX(sim.imLiquidez)");
		qlString.append(",MAX(sim.tpContrato)");
		qlString.append(",MAX(sim.imEfectivoV24)");
		qlString.append(",MAX(sim.imEfectivoV48)");
		qlString.append(",MAX(sim.imEfectivoV72)");
		qlString.append(",MAX(sim.imEfectivoV96)");
		qlString.append(") ");
		qlString.append("FROM Vgpt002Simulacion sim ");
		qlString.append("WHERE sim.cdContrato IN (:contratos) and (tpMercado = :tpMercado OR tpMercado is null) ");
		qlString.append("GROUP BY sim.cdContrato ");
		qlString.append("ORDER BY sim.cdContrato ");

		try {
			String mercado = EnumTipoMercado.getEnumTipoMercadoValor(new Integer(gestor
					.getUsuario().getPerfil().getMercado().getCdMercado().toString()));

			return entityManager().createQuery(qlString.toString())
					.setParameter("contratos", listaContrato).setParameter("tpMercado", mercado)
					.getResultList();
		}
		catch (Exception e) {

			return new ArrayList<Contrato>();
		}
	}

}
